import baseUrl from "./url.js"
let token = uni.getStorageSync("token")
let is_open_socket = false //避免重复连接
let timeout = 2000 //多少秒执行心跳检测
let heartbeatInterval = null //检测服务器端是否还活着
let reconnectTimeOut = null //重连之后多久再次重连
var socketTask = null

// 进入这个页面的时候创建websocket连接【整个页面随时使用】

export function connectSocketInit() {
	if (is_open_socket) return
	socketTask = uni.connectSocket({
		url: `${baseUrl.socketUrl}/${token}`,
		success: () => {
			console.log("正准备建立websocket中...");
			// 返回实例
			return socketTask
		}
	})

	uni.onSocketOpen(() => {
		console.log("WebSocket连接正常！");
		clearTimeout(reconnectTimeOut)
		clearInterval(heartbeatInterval)
		is_open_socket = true;
		start();
	})

	// socketTask.onMessage((res) => {
	// 	console.log('监听服务器发送的消息',JSON.parse(res.data))
	// 	message = JSON.parse(res.data)
	// });	

	// 监听WebSocket接受到服务器的消息事件
	// uni.onSocketMessage((res)=> {
	// 	console.log('收到服务器内容：' + JSON.parse(res.data));
	// 	return JSON.parse(res.data)
	// 	// console.log('收到服务器内容：' + res.data);
	// 	// console.log('收到服务器内容：' + JSON.parse(res.data));
	// });


	// 监听连接失败
	uni.onSocketError(() => {
		console.log('WebSocket连接打开失败，请检查！');
		is_open_socket = false;
		reconnectTimeOut = setTimeout(() => {
			reconnect();
		}, 3000)
	});

	// 监听websocket关闭
	uni.onSocketClose(() => {
		console.log('WebSocket 已关闭！');
		is_open_socket = false
	});
}

//发送消息
export function send(value) {
	console.log(value);
	uni.sendSocketMessage({
		data: JSON.stringify(value)
	});
}



//开启心跳检测
function start() {
	heartbeatInterval = setInterval(() => {
		// console.log("PING","发送心跳")
		// send('PING');
	}, timeout)
}

//重新连接
function reconnect() {
	//停止发送心跳
	clearInterval(heartbeatInterval)
	clearTimeout(reconnectTimeOut)
	//如果不是人为关闭的话，进行重连
	console.log(is_open_socket)
	if (!is_open_socket) {
		reconnectTimeOut = setTimeout(() => {
			connectSocketInit();
		}, 2000)
	}
}

// 关闭长链接
export function removeWebsocket() {
	clearInterval(heartbeatInterval)
	clearTimeout(reconnectTimeOut)
	is_open_socket = false
	heartbeatInterval = null
	reconnectTimeOut = null
	uni.closeSocket()
}